home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / exampleCode / video / simpleVideo / README < prev    next >
Encoding:
Text File  |  1994-08-02  |  5.9 KB  |  197 lines

  1.  
  2.          ~4Dgifts/toolbox/src/exampleCode/video/simpleVideo README
  3.  
  4.  
  5.     
  6.     **********************************************************************
  7.     
  8.     
  9.     SV - Simple Video
  10.     
  11.       "Video so simple, the programs almost write themselves"
  12.     
  13.     
  14.     **********************************************************************
  15.     
  16.     
  17.     This library exists to provide the video programmer with a simple
  18.     programmatic interface on top of the video library(VL). It provides
  19.     functions such as getframe() and putframe() for dealing with single
  20.     frame input/output, while requiring as little additional knowledge of
  21.     the VL possible. Additional utility routines provide control over some
  22.     of the underlying behaviour of the VL. To those familiar with the VL,
  23.     SV hides the details of devices, nodes, paths, and ring buffers.  It
  24.     defines an image data type svImage for dealing with frames of data.
  25.     
  26.     
  27.     Features
  28.     --------
  29.     * Simple: No need to know the details of devices, nodes, 
  30.       paths, and ring buffers;
  31.     * Frame I/O: capture frames, send frames to video output, 
  32.       pastes frames to screen;
  33.     * Read/Write compressed images of all types;
  34.     * Define simple, safer macros for setting some VL controls;
  35.     * Mutiple contexts to support concurrent transfers;
  36.     
  37.     
  38.     
  39.     Simple Single Frame Video Input to Video Output
  40.     -----------------------------------------------
  41.     Suppose we would like to write a simple program to grab a frame
  42.     of video and send it back to our video output:
  43.     
  44.         main()
  45.         {
  46.         getFrame();
  47.         putFrame();
  48.         }    
  49.     
  50.     There, that did it.  Except for one a few small details:
  51.     * How do we select the video input and output sources, and
  52.     * How do we represent the image?
  53.     
  54.     To manipulate the frames of data we're moving around, we define the 
  55.     following functions to deal with images: 
  56.     
  57.         svImage *svNewImage(void);
  58.         void    svFreeImage(svImage **);
  59.     
  60.     To grab a frame of video or send an image to video output, we 
  61.     use the functions:
  62.     
  63.         int svGetFrame(svImage *);
  64.         int svPutFrame(svImage *);
  65.     
  66.     To select our source an destination, we use the functions:
  67.     
  68.         void svSelectInput(int);
  69.         void svSelectOutput(int);
  70.     
  71.     So the full length version of our single frame video
  72.     input to video output goes as follows:
  73.     
  74.         main()
  75.         {
  76.         svImage *image;
  77.     
  78.         svSelectInput(gvINPUT_COMPOSITE_1);
  79.         svSelectOutput(gvOUTPUT_ANALOG);
  80.     
  81.         image = svNewImage();
  82.         svGetFrame(image);
  83.         svPutFrame(image);
  84.         svFreeImage(&image);
  85.         }
  86.     
  87.     
  88.     Selecting a Video Input or Output
  89.     ---------------------------------
  90.     As mentioned above, the function svSelectinput(int) is used to select the
  91.     video input for svGetFrame() and the function svSelectOutput(int) is
  92.     used to selected the video output for svPutFrame(). The list of
  93.     valid inputs and outputs are:
  94.     
  95.         /*
  96.          * Indy connections -
  97.          */
  98.     
  99.         #define vnINPUT_INDYCAM        1
  100.         #define vnINPUT_COMPOSITE        2
  101.         #define vnINPUT_SVIDEO        3
  102.     
  103.     
  104.         /*
  105.          * Galileo connections -
  106.          */
  107.     
  108.         #define gvINPUT_COMPOSITE_1        4
  109.         #define gvINPUT_SVIDEO        5
  110.         #define gvINPUT_COMPOSITE_2        6
  111.         #define gvINPUT_DIGITAL_1        7
  112.         #define gvINPUT_DIGITAL_2        8
  113.         #define gvOUTPUT_ANALOG        9
  114.         #define gvOUTPUT_DIGITAL           10
  115.     
  116.     
  117.     What Else Can You Do With The Image Once You've Got Your Hands On It?
  118.     ---------------------------------------------------------------------
  119.     We've introduced the functions svGetFrame(svImage *) and
  120.     svPutFrame(svImage *) for getting images from video input sending
  121.     images to video output; Here is a complete list of useful functions
  122.     for dealing with images:
  123.     
  124.     
  125.     svImage *svNewImage(void);
  126.         - allocate a new svImage;
  127.     
  128.     void svFreeImage(svImage **);
  129.         - free the image;
  130.     
  131.     int svSaveImage(char *filename, svImage *frame);
  132.         - save the image to a named file;
  133.     
  134.     int svLoadImage(char *filename, svImage **frame /* return */);
  135.         - load in image from a named file;
  136.     
  137.     int svViewImage(svImage *frame, int x, int y);
  138.         - paste an rgb image to the screen;
  139.     
  140.     void  svCompressedImages(int saveCompressed);
  141.        - enable writing of compressed images; 
  142.     
  143.     void svSetImagePacking(int packingType);
  144.        - set the VL_PACKING control; 
  145.     
  146.     
  147.     What else can I do with SV?
  148.     ---------------------------
  149.     Here are some other utility functions that let you modify the
  150.     behaviour of the underlying VL code.
  151.     
  152.     *** Configure the path and control usage mode -  
  153.     
  154.         You can control the usage mode using the functions
  155.     
  156.         void svNodeAccessMode(VLUsageType);
  157.         void svControlAccessMode(VLUsageType);
  158.     
  159.         To set the usage mode on the underlying path path.
  160.         The default is to setup the path with a mode of VL_SHARE.
  161.     
  162.     *** Recover from preemption - 
  163.     
  164.         Since by default the path is configured in VL_SHARE mode,
  165.         it will be preempted by another video program. Use the 
  166.         function 
  167.     
  168.         svRecoverFromPreemption()
  169.     
  170.         to tell SV to attempt to re-setup the path it is using
  171.         when it is preempted.
  172.     
  173.     *** Set the frame count and transfer mode -
  174.     
  175.         void svSetFrameCount(int);   /* default 1 */
  176.         void svSetTransferMode(int); /* default svTRANSFER_DISCRETE */
  177.     
  178.     
  179.     I Don't Understand, Where Can I Find Examples?
  180.     ----------------------------------------------
  181.     There is sample source code for capturing frames, 
  182.     pasting frames to the screen, sending a series of frames 
  183.     to video out, and continuous transfer of frames from
  184.     the vino video input to the galileo video output.
  185.     
  186.     Look in the source code in the examples subdirectory.
  187.     
  188.     
  189.     
  190.     
  191.     
  192.  
  193.  
  194. Don Bennett 
  195. dpb@sgi.com
  196. Digital Media Engineering
  197.